//
//  CZDetailCommant.swift
//  GZWeibo666
//
//  Created by 彭继宗 on 15/12/1.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

class CZDetailCommant: NSObject
{
    
    
    /// 行高
    var rowHeight: CGFloat = 0
    
    //评论创建时间。
    var created_at : String?
    
    //评论的ID
    var id : Int = 0
    
    //评论的内容
    var text : String?
    
    //评论的来源
    var source : String?
    
    //评论作者的用户信息字段 详细
    var user : CZUser?
    
    
    
    /// 对象信息
    override var description: String {
        // 数组存放的是需要打印的属性
        let properties = ["created_at", "id", "text", "source", "user"]
        
        // 根据传入数组作为字典的key,value会从模型里面自动获取
        // \n 换行 \t table
        return "\n \t 微博模型: \(dictionaryWithValuesForKeys(properties))"
    }
    
    /// 字典转模型
    init(dict: [String: AnyObject]) {
        super.init()    // 创建对象
        
        // 有了对象,才能调用对象的方法
        // KVC字典转模型
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forKey key: String)
    {
        if key == "user"
        {
            //            print("user: \(user), value: \(value)")
            
            if let dict = value as? [String: AnyObject] {
                // 在这里字典转模型, 赋值给user属性
                user = CZUser(dict: dict)
            }
            
            // 千万要记得return,不然会被父类从新赋值,覆盖掉了
            return
        }
        super.setValue(value, forKey: key)
    }
    
    /// KVC字典转模型时,字典的key在模型中找不到对应的属性时会调用,在这个方法里面可以什么都不做
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
    
    
    /// 获取评论数据
    
    /**
    获取评论数据,字典转模型
    
    - parameter finished: 闭包回调, 如果有数据,返回评论模型,失败:error != nil
    */
    class func loadCommants(id:Int ,since_id: Int, max_id: Int, finished: (commants: [CZDetailCommant]?, error: NSError?) -> ())
    {
        /// 调用网络工具类获取数据
        CZNetworkTool.sharedInstance.loadcomment(id, since_id:since_id, max_id: max_id, finished: { (result, error) -> () in
            // 网络请求完毕
            
            // 判断是否有错误
            if error != nil || result == nil
            {
                print("error: \(error)")
                // 告诉调用者,出错了
                finished(commants: nil, error: error)
                return
            }
            // 加载到微博数据, 字典转模型
            if let array = result!["comments"] as? [[String: AnyObject]]
            {
                // 能到这里面来, commants 数据是没有问题的
                
                // 创建一个数组来存放转好的模型
                var commants = [CZDetailCommant]()
                
                // 遍历数组,获取里面的每一个字典,
                for dict in array {
                    // 字典转模型
                    let commant = CZDetailCommant(dict: dict)
                    commants.append(commant)
                }
                
                // 字典转模型完成, 告诉调用者,有模型数据
                
                finished(commants: commants, error: nil)
            }
            else
            {
                // 返回的数据不能字典转模型,告诉调用者,没有模型数据
                finished(commants: nil, error: nil)
                print("没有模型数据")
            }
        })
    } 
}
